About 3472 letters

About 17 minutes

#Python's interprocess communication (IPC)

A process has its own independent memory space and resources. Trying to pass information through global variables doesn't work.

For example, in the code below, the child process prints an empty string instead of Ciallo~(∠・ω< )⌒★:

from multiprocessing import Process message: str = '' def worker(): print(message) if __name__ == '__main__': message = 'Ciallo~(∠・ω< )⌒★' # Attempting to send data p = Process(target=worker) # Create process p.start() # Start process p.join() # Wait for process to finish

In Python, you can use a Queue or Pipe from the multiprocessing module for interprocess communication (IPC).

#Queue

Create a queue with the Queue class from the multiprocessing module. Use the put method to add data to the tail and the get method to remove data from the head.

QueueTopology queue Head A B C D Tail get() get() queue:f0->get() put() put() put()->queue:f5

Example:

from multiprocessing import Process, Queue # Producer, sends data def producer(q: Queue): for i in range(5): q.put(i) # Send data q.put(None) # Send None to signal end # Consumer, receives data def consumer(q: Queue): while (item := q.get()) is not None: print(f'Received {item}') if __name__ == '__main__': q = Queue() # Create queue p1 = Process(target=producer, args=(q,)) p2 = Process(target=consumer, args=(q,)) p1.start() # Start processes p2.start() p1.join() # Wait for processes to finish p2.join()

Output:

Received 0 Received 1 Received 2 Received 3 Received 4

#Pipe

Use the Pipe function from the multiprocessing module to create a pipe. It returns two connection endpoints—data written on one end can be read from the other.

PipeStructure end1 Endpoint 1 buffer Buffer end1->buffer send() buffer->end1 recv() end2 Endpoint 2 buffer->end2 recv() end2->buffer send()

Example:

from multiprocessing import Process, Pipe from multiprocessing.connection import PipeConnection # Producer, sends data def producer(tx: PipeConnection): for i in range(5): tx.send(i) # Send data tx.send(None) # Send None to signal end # Consumer, receives data def consumer(rx: PipeConnection): while (item := rx.recv()) is not None: print(f'Received {item}') if __name__ == '__main__': tx, rx = Pipe() # Create pipe p1 = Process(target=producer, args=(tx,)) p2 = Process(target=consumer, args=(rx,)) p1.start() # Start processes p2.start() p1.join() # Wait for processes to finish p2.join()

Output:

Received 0 Received 1 Received 2 Received 3 Received 4

Created in 5/15/2025

Updated in 5/21/2025